#ifndef __CRC16_H
#define __CRC16_H

#include "stm32f4xx.h"

// CRC16配置（可根据需求修改）
#define CRC16_POLYNOMIAL    0x8005  // 多项式（Modbus）
#define CRC16_INIT_VALUE    0xFFFF  // 初始值
#define CRC16_XOR_OUT       0x0000  // 结果异或值
#define CRC16_REVERSE_DATA  1       // 数据是否反转（1：是，0：否）
#define CRC16_REVERSE_RESULT 1      // 结果是否反转（1：是，0：否）

/**
 * @brief  计算CRC16校验值
 * @param  data: 数据缓冲区指针
 * @param  len: 数据长度（字节）
 * @return 计算得到的CRC16值
 */
uint16_t CRC16_Calculate(uint8_t *data, uint32_t len);

/**
 * @brief  更新CRC16校验值（用于分块计算）
 * @param  crc: 当前CRC值
 * @param  data: 新增数据
 * @param  len: 新增数据长度
 * @return 更新后的CRC值
 */
uint16_t CRC16_Update(uint16_t crc, const uint8_t *data, uint32_t len);

#endif /* __CRC16_H */

